import katex from 'katex';
export function getLastTwoCharacters(name) {
 // 处理输入为空或非字符串的情况
 if (!name || typeof name !== 'string') {
  return '';
}

// 去除首尾空格
const trimmedName = name.trim();

// 如果去除空格后为空，直接返回空字符串
if (trimmedName.length === 0) {
  return '';
}

// 查找第一个出现的空格或·的位置
const spaceIndex = trimmedName.indexOf(' ');
const dotIndex = trimmedName.indexOf('·');

// 找到最先出现的分隔符位置（取最小的非-1索引）
const separatorIndices = [spaceIndex, dotIndex].filter(index => index !== -1);
const firstSeparatorIndex = separatorIndices.length > 0 ? Math.min(...separatorIndices) : -1;

let targetPart;

if (firstSeparatorIndex !== -1) {
  // 存在分隔符，取分隔符之前的部分
  targetPart = trimmedName.substring(0, firstSeparatorIndex);
} else {
  // 不存在分隔符，使用整个名字
  targetPart = trimmedName;
}

// 直接取目标部分的最后最多两个字符（不限制类型）
return targetPart.slice(-2);
}
/**
 * 生成一个在指定文件名列表中不重复的唯一文件名
 * @param {string[]} existingNames - 已存在的文件名数组（如：['a.pdf', 'a(1).pdf']）
 * @param {string} fileName - 当前要检查的文件名（如：'a.pdf'）
 * @returns {string} 返回唯一不重复的文件名（如：'a(2).pdf'）
 */
export function getUniqueFileName(existingNames, fileName) {
  // 如果传入的文件名不存在于列表中，直接返回原名
  if (!existingNames.includes(fileName)) {
    return fileName
  }

  const nameWithoutExt = fileName.substring(0, fileName.lastIndexOf('.'))
  const ext = fileName.substring(fileName.lastIndexOf('.')) // 包括点号，如 ".pdf"
  let counter = 1
  let newName = `${nameWithoutExt}(${counter})${ext}`

  // 循环直到找到一个不存在于 existingNames 中的名字
  while (existingNames.includes(newName)) {
    counter++
    newName = `${nameWithoutExt}(${counter})${ext}`
  }

  return newName
}

export function returnIcon(url, type) {
  if (type == '1') {
    if (url.indexOf('.doc') !== -1 || url.indexOf('.DOC') !== -1) {
      return require('@/assets/images/resource/doc.png')
    } else if (url.indexOf('.pdf') !== -1 || url.indexOf('.PDF') !== -1) {
      return require('@/assets/images/resource/pdf.png')
    } else if (url.indexOf('.ppt') !== -1 || url.indexOf('.PPT') !== -1) {
      return require('@/assets/images/resource/ppt.png')
    } else if (url.indexOf('.pptx') !== -1 || url.indexOf('.PPTX') !== -1) {
      return require('@/assets/images/resource/pptx.png')
    } else if (url.indexOf('.docx') !== -1 || url.indexOf('.DOCX') !== -1) {
      return require('@/assets/images/resource/docx.png')
    } else if (url.indexOf('.mp4') !== -1 || url.indexOf('.MP4') !== -1) {
      return require('@/assets/images/resource/mp4.png')
    } else if (url.indexOf('.mp3') !== -1 || url.indexOf('.MP3') !== -1) {
      return require('@/assets/images/resource/mp3.png')
    } else if (url.indexOf('.png') !== -1 || url.indexOf('.PNG') !== -1) {
      return require('@/assets/images/resource/png.png')
    } else if (
      url.indexOf('.jpg') !== -1 ||
      url.indexOf('.JPG') !== -1 ||
      url.indexOf('.webp') !== -1 ||
      url.indexOf('.WEBP') !== -1 ||
      url.indexOf('.jpeg') !== -1 ||
      url.indexOf('.JPEG') !== -1
    ) {
      return require('@/assets/images/resource/jpg.png')
    } else if (
      url.indexOf('.xls') !== -1 ||
      url.indexOf('.XLS') !== -1 ||
      url.indexOf('.xlsx') !== -1 ||
      url.indexOf('.XLSX') !== -1
    ) {
      return require('@/assets/images/resource/xls.png')
    } else if (url.indexOf('.wps') !== -1 || url.indexOf('.WPS') !== -1) {
      return require('@/assets/images/resource/wps.jpg')
    } else {
      return require('@/assets/images/resource/other.jpg')
    }
  } else {
    return require('@/assets/images/resource/3d.png')
  }
}

// 一个函数：根据url判断是否是视频
export function isVideo(url) {
  if (url) {
    const videoExtensions = [
      'mp4',
      'MP4',
      'avi',
      'AVI',
      'mkv',
      'MKV',
      'mov',
      'MOV',
      'wmv',
      'WMV',
      'flv',
      'FLV',
      'webm',
      'WEBM',
      'mpeg',
      'MPG',
      'mpg',
      'm4v',
      'M4V'
    ]
    const extension = url.split('.').pop().toLowerCase()
    return videoExtensions.includes(extension)
  }
  return false
}

export function isImage(url) {
  if (url) {
    const imageExtensions = [
      'jpg',
      'JPG',
      'jpeg',
      'JPEG',
      'png',
      'PNG',
      'gif',
      'GIF',
      'bmp',
      'BMP',
      'svg',
      'SVG',
      'webp',
      'WEBP'
    ]
    const extension = url.split('.').pop().toLowerCase()
    return imageExtensions.includes(extension)
  }
  return false
}

// 封装一个处理函数
export function tranListToTreeData(arr) {
  let treeList = []
  arr.forEach((item) => {
    item.children = []
    item.level = 1
    if (item.list && item.list.length > 0) {
      item.list.forEach((item2) => {
        let obj = {
          majorTypeName: item.majorTypeName,
          ...item2,
          level: 2
        }
        item.children.push(obj)
      })
    }
    treeList.push(item)
  })
  return treeList
}

export function returnType(name) {
  let uploadType = name.slice(name.lastIndexOf('.'), name.length)
  let imgTypes = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp']
  let videoTypes = ['.mp4', '.webm', '.wmv', '.avi', '.mkv']
  let wordPdfPptTypes = ['.pdf', '.doc', '.docx', '.pptx']
  //type==1  图片类型文件，type==2视频类型文件
  let type
  if (imgTypes.indexOf(uploadType) > -1) {
    type = 1
  } else if (videoTypes.indexOf(uploadType) > -1) {
    type = 2
  } else if (wordPdfPptTypes.indexOf(uploadType) > -1) {
    type = 3
  } else {
    type = 4
  }
  return type
}

export function returnName(url) {
  return url.slice(url.lastIndexOf('/') + 1, url.length)
}

export function renderedDescription(description) {
  if (!description) {
    return description
  }
  // 使用 DOMParser 解析 HTML 字符串
  const parser = new DOMParser()
  const doc = parser.parseFromString(description, 'text/html')

  // 查找所有的公式 span
  const formulaSpans = doc.querySelectorAll('span[data-w-e-type="formula"]')

  formulaSpans.forEach(span => {
    const latex = span.getAttribute('data-value')
    try {
      // 使用 KaTeX 渲染 LaTeX 公式
      const renderedFormula = katex.renderToString(latex, { throwOnError: false })
      // 创建一个新的 div 元素替换 span
      const formulaCard = document.createElement('span')
      formulaCard.className = 'formula-card'
      formulaCard.innerHTML = renderedFormula
      span.parentNode.replaceChild(formulaCard, span)
    } catch (error) {
      console.error('Error rendering LaTeX:', error)
    }
  })

  // 返回处理后的 HTML
  return doc.body.innerHTML
}

export function returnSize(size) {
  if (size < 1024) {
    return size + 'B'
  } else if (size < 1048576) {
    return (size / 1024).toFixed(2) + 'KB'
  } else if (size < 1073741824) {
    return (size / 1048576).toFixed(2) + 'MB'
  } else {
    return (size / 1073741824).toFixed(2) + 'GB'
  }
}
